import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * @author 徐志荣
 * @date 2023/3/3 20:22
 */
public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        //JDBC 步骤
        //1. 创建并初始化一个数据源
        //数据源: 数据从哪里来? 描述:数据库服务器在哪里? DataSource
        //向上转型
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test4?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2. 和数据库服务器建立连接
        Connection connection =  dataSource.getConnection();

        //从控制台读取用户的输入内容
        System.out.println("请输入学生姓名:");
        String name = scanner.next();
        System.out.println("请输入学生性别:");
        String sex = scanner.next();
        System.out.println("请输入学生年龄:");
        int age = scanner.nextInt();
        System.out.println("请输入学生地址:");
        String addr = scanner.next();


        //3. 构造SQL语句,要插入的数据是写死的(硬编码)
        //更合适的做法,把数据通过其他方式让用户输入(比如通过控制台输入)
        //a. 第一种方式~
         //String sql = "insert into student value(" + id + ",'" + name + "')";

        //b. 第二种方式~
        String sql = "insert into student(stuName,stuSex,stuAge,stuAddr) value(?,?,?,?)";
        //使用 PreparedStatement 提前预编译sql ;让客户端对SQL进行预编译,服务器做的工作就简单一些,压力会小不少
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setString(2,sex);
        statement.setInt(3,age);
        statement.setString(4,addr);


        //这个打印需要加到 拼接 数据之后
        System.out.println(statement);

        //4. 执行SQL语句
        //executeUpdate : insert,delete.update
        int ret = statement.executeUpdate();
        System.out.println("ret = " + ret);

        //5. 释放必要的资源
        statement.close();
        connection.close();
    }
}
